# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.

from odoo import api, fields, models
import datetime

from ..nc_api.to_nc import NC


class FapiaoDraw(models.Model):
    _inherit = "fp.fapiao.draw"

    def action_send_result(self):
        self2 = self.filtered(lambda r: r.state in ['done', 'be_invalid'])

        print('draw action_send_result', self2)

        if self2:
            return self2._action_send_result()

        return

    def _action_send_result(self):
        print('_action_send_result', self)
        lines = self.fapiao_id.mapped('line_ids')

        todo = []

        # DEFAULT_SERVER_DATE_FORMAT = "%Y-%m-%d"
        # DEFAULT_SERVER_TIME_FORMAT = "%H:%M:%S"

        state_map = {
            'done': '1',
            'be_invalid': '2'
        }

        today = datetime.datetime.now()
        today_str = today.strftime('%Y-%m-%d %H:%M:%S')

        for line in lines:
            state = line.fapiao_id.state
            state2 = state_map.get(state, '1')

            for sale_line in line.sale_line_ids:
                for ods_line in sale_line.ods_line_ids:
                    vals = {
                        'bill_type': '1',  # 1:blue；2：red  . todo 红发票也需要回写
                        'action_type': state2,
                        "action_time": today_str,  # 时间

                        'goldtaxno': line.fapiao_id.type_code,
                        'goldtaxcode': line.fapiao_id.code,
                        'checkcode': line.fapiao_id.check_code,
                        'kprq': line.fapiao_id.date_fapiao.strftime('%Y-%m-%d'),
                        'totalmoney': line.fapiao_id.amount_total,
                        'ntaxtotalmoney': line.fapiao_id.amount_untaxed,
                        'totaltax': line.fapiao_id.amount_tax,

                        'purchasername': line.fapiao_id.buyer_name,

                        'saleinvoiceid': ods_line.order_id.client_order_ref,
                        'saleinvoicebid': ods_line.client_line_ref,

                        'nnum': line.quantity,
                        'ntaxamount': line.amount_untaxed,
                        'taxrate': line.tax_ratio,
                        'tax': line.amount_tax,

                    }

                    todo.append(vals)

        print('todo,', todo)
        # 回调 外业务系统 回写
        # to override

        if not todo:
            return

        url = self.env['fp.api.provider'].url_get('hwnc')

        nc = NC(url)
        result = nc.getxsfp(todo)

        pass


# fp_product
#  + state  待确认
#  fp.nc.ods.product


# fp.sale.order
# fp.ods.sale.order
# fp.nc.ods.sale.order
#########

# fp.sale.order
#   add  user_id

# nc.partner  记录 nc 的 客户
# 用 自己的 票面 fp.partner 做开票客户
#  nc.partner --- m2o ---->  fp.partner
#   nc_state
# 商品 用 咱的 fp.product


# fp.sale.split
# fp.sale.split.group
# fp.sale.split.product  --->  fp.product

# fp.fapiao.line --->   fp.sale.order.line  .ids?

#
# fp_sale + hw_sale ok

#####################################

# fp.ods.sale.order
#   user_phone ->  user_id
# fp.ods.sale.order.line
# fp.product 设置一个 折扣商品  active = false
# fp.ods2sale.wizard 合并 明细行, 折扣分摊

#####################################

# fp.nc.ods.sale.order
#   user_phone


# lookup 机制:
# 参数: 原始的文本数据
# 模型: 被lookup的模型
# 返回结果:
# 1. 无: 人工检查. 选择旧 or 生成新的.  生成新 需要权限控制
# 2. 有1条. 检查确认
# 3. 有n条. 检查确认

# 几种导入发票的情况:
# 1. 税局端 底账库直接 拉取 包括进项销项
# 2. OCR 扫描 文字

# 发票导入的处理逻辑:
# 0. 确认是销项票, 还是进项票.
# 01. 我方: 销项的销售方. 进项的购买方.
# 02. 伙伴方: 销项的购买方. 进项的销售方.
# 1. 数据进临时表 ods.fapiao, 暂存. 文本格式
# 11. OCR 扫描时, 需要人工检查 票面文本
# 2. check 我方. 非我方票不收
# 3. lookup 伙伴方(name, tin) from fp.partner 模型.
# 31. 专票时, 必须 用 tin
# 4. lookup 税收分类(name, code) from fp.vat.product 模型.
# 5. lookup 商品(伙伴,税收分类,名称,规格) from fp.product 模型.
# 51. 补充 税率, 价格.
